/*****************************************************************************/
/*                        >>> func_rutinas_consolas.c- <<<                   */
/*	Trabajo Practico 2do. cuatrimestre 2011                                  */
/*	TP:"FUSELAJE"                                                            */
/*	GRUPO: Reduce Fat Fast                                                   */
/*	INTEGRANTES: Emanuel Genovese                                            */
/*               Federico Gabriel Garcia                                     */
/*               Federico Pioli                                              */
/*               Esther Insfrain                                             */
/*               Luciano Bagattin                                            */
/*	Fecha UM:                                                                */
/*****************************************************************************/
#include "../headers/prototipos.h"
#include <string.h>
#include "../headers/constantes.h"
#include "func_strings.h"

/******************************************************************************/
/* Nombre de Funcion: fVerificaSectores                                       */
/* Parametros:  sectorDesde: sector por el cual va a empezar a borrar         */
/*              sectorHasta: sector por el cual va a terminar de borrar       */
/* Descripcion: Funcion que verifica si los limites a borrar son validos      */
/******************************************************************************/
int fVerificaSectores(int iSectorDesde, int iSectorHasta) {
	if ((iSectorDesde == -1) || (iSectorHasta == -1)) {
		return 1;
	} else if (iSectorDesde > iSectorHasta) {
		return 1;
	}
	return 0;
}

/********************************************************************************/
/* Nombre de Funcion: fVerificaCadena                                           */
/* Parametros: cadena:cadena de sectores                                        */
/* Descripcion: Funcion que verifica si la cadena de sectores fue correctamente */
/* ingresada      																*/
/********************************************************************************/

int fVerificarCadena(char * cadena) {
	/*declaracion de variables locales*/
	char cComienzo = cadena[0];
	char cFinal = cadena[((int) strlen(cadena)) - 1];
	char sResto[1000] = "\0";
	char sNumero[50] = "\0";
	int iCantidadSectores = 0;
	int i = 0, a, j = 0;
	/*fin de la declaracion de variables locales*/

	sResto[strlen(sResto)] = '\0';
	if ((cComienzo == '(') && (cFinal == ')')) {
		for (; cadena[i] != '('; i++)
			;
		for (i++; cadena[i] != ')'; sResto[j] = cadena[i], i++, j++)
			;
		sResto[i] = '\0';
		i = 0;
		while (sResto[i] != '\0') {
			for (a = 0; sResto[i] != ',' && sResto[i] != '\0'; i++, a++) {
				sNumero[a] = sResto[i];
			} //fin del for

			i++;

		} //fin del while.
		if (iCantidadSectores <= 5) {
			return 0;
		} else {
			return 2;
		} //fin del if
	} //fin del if
	return 1;
} //fin del fValidarCadena

/********************************************************************************/
/* Nombre de Funcion: pArmadoResultTrace                                        */
/* Parametros: st:Estructura del trace                                          */
/* Descripcion: Funcion que imprime por pantalla el resultado del trace         */
/********************************************************************************/
void pArmadoResultadoTrace(stTrace st, t_log *log) {
	/*declaracion de variables locales*/
	int iMinSector, iMaxSector;
	int iCotaSuperior, iCotaInferior, i;
	char sCadenaLog[1024] = "\0";
	char sSector[50] = "\0";
	char sPista[50] = "\0";
	char sCadenaAImprimir[100] = "\0";

	/*fin de la declaracion de variables locales*/
	/*Calculo el primer sector de la pista en la que esta el cabezal.*/
	iMinSector = (st.iPistaAct * st.iSectores) + 1;
	//calculo el maximo sector de la pista del cabezal
	iMaxSector = (st.iPistaAct + 1) * st.iSectores;

	printf("Posición Actual:%d:%d\n", st.iPistaAct, st.iSectorAct);

	sprintf(sCadenaLog, "%s%d%s%d", "Posición Actual: ", st.iPistaAct, ":",
			st.iSectorAct);
	puts(sCadenaLog);
	log_info(log, NOMBREPROCESO, "Message Info: %s", sCadenaLog);
	memset(sCadenaLog, '\0', 1024);
	sprintf(sCadenaLog, "%s%d%s%d", "Sector Solicitado: ", st.iPistaPedido, ":",
			st.iSectorPedido);
	log_info(log, NOMBREPROCESO, "Message Info: %s", sCadenaLog);
	puts(sCadenaLog);
	memset(sCadenaLog, '\0', 1024);
	sprintf(sCadenaLog, "Sectores Recorridos:");
	printf("Sectores Recorridos:");
	if (st.iPistaAct == st.iPistaPedido) {
		if (st.iSectorAct <= st.iSectorPedido) {
			iCotaInferior = st.iSectorAct;
			iCotaSuperior = st.iSectorPedido;
			st.iSectorAct++;
			for (i = iCotaInferior + 1; i <= iCotaSuperior; i++) {
				pIntacad(i, sSector);
				pIntacad(st.iPistaAct, sPista);
				if (i == (iCotaInferior + 1)) {

					strcat(sCadenaLog, sPista);
					strcat(sCadenaLog, ":");
					strcat(sCadenaLog, sSector);

				}
				printf("%s%s%s", sPista, ":", sSector);

				if (i != (iCotaSuperior)) {
					printf(", ");
				} else {
					if (iCotaInferior + 1 != iCotaSuperior) {
						strcat(sCadenaLog, " .. ");

						strcat(sCadenaLog, sPista);
						strcat(sCadenaLog, ":");
						strcat(sCadenaLog, sSector);
					}

					printf("\n");
				} //fin del if

			} //fin del for
		} else {
			iCotaInferior = st.iSectorAct;
			iCotaSuperior = iMaxSector;
			for (i = iCotaInferior + 1; i <= iCotaSuperior; i++) {
				pIntacad(i, sSector);
				pIntacad(st.iPistaAct, sPista);

				if (i == (iCotaInferior + 1)) {
					strcat(sCadenaLog, sPista);
					strcat(sCadenaLog, ":");
					strcat(sCadenaLog, sSector);
				}

				printf("%s%s%s%s", sPista, ":", sSector, ",");
			}
			iCotaInferior = iMinSector;
			iCotaSuperior = st.iSectorPedido;
			for (i = iCotaInferior + 1; i <= iCotaSuperior; i++) {
				pIntacad(i, sSector);
				pIntacad(st.iPistaAct, sPista);
				printf("%s%s%s", sPista, ":", sSector);
				if (i != (iCotaSuperior)) {
					printf(", ");
				} else {
					if (iCotaInferior + 1 != iCotaSuperior) {
						strcat(sCadenaLog, " .. ");
                        strcat(sCadenaLog, sPista);
						strcat(sCadenaLog, ":");
						strcat(sCadenaLog, sSector);
					}

					printf("\n");
				} //fin del if

			}

		} //fin del if
	} else {


	}
	log_info(log, NOMBREPROCESO, "Message Info: %s", sCadenaLog);
	memset(sCadenaLog, '\0', 1024);
	sprintf(sCadenaLog, "%s%.2f%s","Tiempo consumido:", st.fTiempoConsumido," ms");
	puts(sCadenaLog);
	log_info(log, NOMBREPROCESO, "Message Info: %s", sCadenaLog);
	memset(sCadenaLog, '\0', 1024);
	memset(sPista, '\0', 50);
	memset(sSector, '\0', 50);
	pIntacad(st.iPistaSig, sPista);
	pIntacad(st.iSectorSig, sSector);

	sprintf(sCadenaLog, "%s%s%s%s", "Próximo Sector", sPista, ":", sSector);
	puts(sCadenaLog);
	log_info(log, NOMBREPROCESO, "Message Info: %s", sCadenaLog);

} //fin del pArmadoResultTrace*/
